/**
 * @Author: linzp
 * @Date: 2021/08/24/10:15
 * 抽象工厂其实就是相对于工厂方法多了一个维度而已
 * 比如 宝马和保时捷 都要生产各自的运动型和商务型汽车 用工厂方法来看的话 就是只多了一种新的车型 属于同一产品族
 * 但其实相对于 两种品牌来说 这两个类型其实是可以共用的 就跟工厂一样可以共用 这样就只需要工厂 生产属于不同产品树的产品族即可
 * 从而做到不是新增产品 而是新增产品树的目的
 *
 *
 */
public class factory {
}

    //抽象产品
    interface Car {
        void work();
    }
/**************************具体产品树**************************************/

    //具体产品树--运动
    class Sport_PorscheCar implements Car{

        @Override
        public void work() {
            System.out.println("保时泰工作");
        }
    }
    class Sport_BmwCar implements Car {

        @Override
        public void work() {
            System.out.println("宝马工作");

        }
    }



    //具体产品树--商务
    class Business_PorscheCar implements Car{

        @Override
        public void work() {
            System.out.println("保时泰工作");
        }
    }

    class Business_BmwCar implements Car {

        @Override
        public void work() {
            System.out.println("宝马工作");

        }
    }


    //抽象汽车工厂
    interface CarFactory{

    }



    //具体运动工厂 运动型
    class SportFactory implements CarFactory{
        public Sport_PorscheCar productPorscheCar(){
            System.out.println("工厂 运动型产品树 工厂生产 保时捷运动汽车");
            return new Sport_PorscheCar();
        }

         public Sport_BmwCar productBmwCar(){
             System.out.println("工厂 运动型产品树 工厂生产 保时捷运动汽车");
             return new Sport_BmwCar();
         }

    }

    //具体商务工厂 宝马厂
    class BusinessFactory implements CarFactory{
        public Business_PorscheCar productPorscheCar(){
            System.out.println("工厂 运动型产品树 工厂生产 保时捷运动汽车");
            return new Business_PorscheCar();
        }

        public Business_BmwCar productBmwCar(){
            System.out.println("工厂 运动型产品树 工厂生产 保时捷运动汽车");
            return new Business_BmwCar();
        }
    }






